/*
更新地址：https://raw.githubusercontent.com/Wenmoux/scripts/wen/jd/jd_ddnc_farmpark.js
============Quantumultx===============
[task_local]
#欧洲狂欢杯
号1默认给我助力 后续号给号1
入口 https://lzdz-isv.isvjcloud.com/dingzhi/hisense/europeancup/activity/7431935?activityId=901100032442101&shareUuid=b7f58330cb0844b485afacbdea3c7bca&adsource=null&initHash=/home&shareuserid4minipg=8A+Mf3SBYE8spQtvzQ2VLE7oeVP9kq2pYSH90mYt4m3fwcJlClpxrfmVYaGKuquQkdK3rLBQpEQH9V4tdrrh0w==&shopid=undefined&lng=107.146945&lat=33.255267&sid=cad74d1c843bd47422ae20cadf6fe5aw&un_area=8_573_6627_52446)
55 59 9  * * ? https://raw.githubusercontent.com/Wenmoux/scripts/wen/jd/jd_europeancup.js, tag=欧洲狂欢杯, img-url=https://raw.githubusercontent.com/Orz-3/mini/master/Color/jd.png, enabled=true
*/
const $ = new Env( '狂欢欧洲杯' );
//Node.js用户请在jdCookie.js处填写京东ck;
const jdCookieNode = $.isNode() ? require( './jdCookie.js' ) : '';
cupExid = $.isNode() ? ( process.env.Cupexid ? process.env.Cupexid : 38 ) : ( $.getdata( "Cupexid" ) ? $.getdata( "Cupexid" ) : 38 ) || 38;

const randomCount = $.isNode() ? 20 : 5;
const notify = $.isNode() ? require( './sendNotify' ) : '';
let merge = {}
let codeList = []
//IOS等用户直接用NobyDa的jd cookie
let cookiesArr = [],
    cookie = '';
if ( $.isNode() ) {
    Object.keys( jdCookieNode ).forEach( ( item ) => {
        cookiesArr.push( jdCookieNode[ item ] )
    } )
    if ( process.env.JD_DEBUG && process.env.JD_DEBUG === 'false' ) console.log = () => { };
} else {
    cookiesArr = [ $.getdata( 'CookieJD' ), $.getdata( 'CookieJD2' ), ...jsonParse( $.getdata( 'CookiesJD' ) || "[]" ).map( item => item.cookie ) ].filter( item => !!item );
}

const JD_API_HOST = `https://api.m.jd.com/client.action`;
message = ""
$.actid = "901100032442101"
$.shareuuid = "26136166a0714f5193f4298370b9abe9" //俺的助力码 
!( async () => {
    if ( !cookiesArr[ 0 ] ) {
        $.msg( $.name, '【提示】请先获取cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {
            "open-url": "https://bean.m.jd.com/"
        } );
        return;
    }
    for ( let i = 0; i < cookiesArr.length; i++ ) {
        cookie = cookiesArr[ i ];
        if ( cookie ) {
            $.UserName = decodeURIComponent( cookie.match( /pt_pin=([^; ]+)(?=;?)/ ) && cookie.match( /pt_pin=([^; ]+)(?=;?)/ )[ 1 ] )
            $.index = i + 1;
            $.cando = true
            $.cow = ""
            $.isLogin = true;
            $.nickName = '';
            $.drawresult = ""
            $.exchange = ""
            await TotalBean();
            console.log( `\n******开始【京东账号${ $.index }】${ $.nickName || $.UserName }*********\n` );
            if ( !$.isLogin ) {
                $.msg( $.name, `【提示】cookie已失效`, `京东账号${ $.index } ${ $.nickName || $.UserName }\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {
                    "open-url": "https://bean.m.jd.com/bean/signIndex.action"
                } );
                if ( $.isNode() ) {
                    await notify.sendNotify( `${ $.name }cookie已失效 - ${ $.UserName }`, `京东账号${ $.index } ${ $.UserName }\n请重新登录获取cookie` );
                }
                continue
            }
            await genToken()
            await getActCk()
            await getToken2()
            await getMyPin()
            await adlog()
            await getUserInfo()
            await getUid()
            if ( $.cando ) {
                await exchange( cupExid ) //兑换
                await getinfo()
                taskList = $.taskList
                for ( j = 0; j < taskList.length; j++ ) {
                    task = taskList[ j ]
                    console.log( task.taskname )
                    await dotask( task.taskid, task.params )
                    if ( task.taskid == "scanactive" ) {
                        for ( m = 36; m < 41; m++ ) {
                            await dotask( task.taskid, m )
                        }
                    } else if ( task.taskid == "scansku" ) {
                        await getproduct()
                        for ( l = 0; l < $.plist.length; l++ ) {
                            console.log( "去浏览商品 :" + $.plist[ l ].venderId )
                            await writePersonInfo( $.plist[ l ].venderId )
                            await dotask( task.taskid, $.plist[ l ].id )
                        }
                    } else {
                        await dotask( task.taskid, task.params )
                    }

                }
                await exchange( 38 ) //兑换10豆
                await getinfo()

                message += `【京东账号${ $.index }】${ $.nickName || $.UserName }\n${ $.cow } \n ${ $.exchange }\n`
            } else {
                console.log( "跑不起来了~请自己进去一次球场" )
            }
        }
    }

    if ( message.length != 0 ) {
        if ( $.isNode() ) {
            await notify.sendNotify( "欧洲狂欢杯", `${ message }\n 欧洲杯入口：https://lzdz-isv.isvjcloud.com/dingzhi/hisense/europeancup/activity/7431935?activityId=901100032442101&shareUuid=b7f58330cb0844b485afacbdea3c7bca&adsource=null&initHash=/home&shareuserid4minipg=8A+Mf3SBYE8spQtvzQ2VLE7oeVP9kq2pYSH90mYt4m3fwcJlClpxrfmVYaGKuquQkdK3rLBQpEQH9V4tdrrh0w==&shopid=undefined&lng=107.146945&lat=33.255267&sid=cad74d1c843bd47422ae20cadf6fe5aw&un_area=8_573_6627_52446\n\n吹水群：https://t.me/wenmouxx` );
        } else {
            $.msg( $.name, "", '欧洲狂欢杯' + message )
        }
    }
} )()
    .catch( ( e ) => $.logErr( e ) )
    .finally( () => $.done() )
//获取活动信息

function TotalBean () {
    return new Promise( async resolve => {
        const options = {
            url: "https://me-api.jd.com/user_new/info/GetJDUserInfoUnion",
            headers: {
                Host: "me-api.jd.com",
                Accept: "*/*",
                Connection: "keep-alive",
                Cookie: cookie,
                "User-Agent": $.isNode() ? ( process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : ( require( './USER_AGENTS' ).USER_AGENT ) ) : ( $.getdata( 'JDUA' ) ? $.getdata( 'JDUA' ) : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1" ),
                "Accept-Language": "zh-cn",
                "Referer": "https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&",
                "Accept-Encoding": "gzip, deflate, br"
            }
        }
        $.get( options, ( err, resp, data ) => {
            try {
                if ( err ) {
                    $.logErr( err )
                } else {
                    if ( data ) {
                        data = JSON.parse( data );
                        if ( data[ 'retcode' ] === "1001" ) {
                            $.isLogin = false; //cookie过期
                            return;
                        }
                        if ( data[ 'retcode' ] === "0" && data.data && data.data.hasOwnProperty( "userInfo" ) ) {
                            $.nickName = data.data.userInfo.baseInfo.nickname;
                        }
                        if ( data[ 'retcode' ] === '0' && data.data && data.data[ 'assetInfo' ] ) {
                            $.beanCount = data.data && data.data[ 'assetInfo' ][ 'beanNum' ];
                        }
                    } else {
                        $.log( '京东服务器返回空数据' );
                    }
                }
            } catch ( e ) {
                $.logErr( e )
            } finally {
                resolve();
            }
        } )
    } )
}

//genToken
function genToken () {
    let config = {
        url: 'https://api.m.jd.com/client.action?functionId=genToken&clientVersion=10.0.5&build=88679&client=android&d_brand=Xiaomi&d_model=RedmiK30&osVersion=11&screen=2175*1080&partner=xiaomi001&oaid=b30cf82cacfa8972&openudid=290955c2782e1c44&eid=eidAef5f8122a0sf2tNlFbi9TV+3rtJ+jl5UptrTZo/Aq5MKUEaXcdTZC6RfEBt5Jt3Gtml2hS+ZvrWoDvkVv4HybKpJJVMdRUkzX7rGPOis1TRFRUdU&sdkVersion=30&lang=zh_CN&uuid=290955c2782e1c44&aid=290955c2782e1c44&area=8_573_6627_52446&networkType=wifi&wifiBssid=e4e99f6369a1d19cdb3d775040f7c6b7&uts=0f31TVRjBSupVC5FrtaNQe8qCtXMmNz3X0Tor1OQBShGe0p03DpNlSh7sVXWosFqLgKcvrTyAGQsC4k2rpivPt24vfw7RDcJ%2Bq3QNqsc1fLN%2BbBSAd15tXqtvyyu59mM4D2XVs0G%2B9W3S%2Bx6SVLo%2FNZhgOK3V5MWrb1p2BEgr2j%2FU2oD%2FuCgRPaaNEZrjrZSzhrs7Z6c8zVDknwdid42mw%3D%3D&uemps=0-0&st=1624552538730&sign=04d4841cd13e563172e60f4d5293fc45&sv=100',
        body: 'body=%7B%22action%22%3A%22to%22%2C%22to%22%3A%22https%253A%252F%252Flzdz-isv.isvjcloud.com%252Fdingzhi%252Fhisense%252Feuropeancup%252Factivity%252F7431935%253FactivityId%253D901100032442101%2526shareUuid%253Db7f58330cb0844b485afacbdea3c7bca%2526adsource%253Dnull%2526initHash%253D%252Fhome%2526shareuserid4minipg%253D8A%25252BMf3SBYE8spQtvzQ2VLE7oeVP9kq2pYSH90mYt4m3fwcJlClpxrfmVYaGKuquQkdK3rLBQpEQH9V4tdrrh0w%25253D%25253D%2526shopid%253Dundefined%22%7D&',
        headers: {
            'Host': 'api.m.jd.com',
            'accept': '*/*',
            'user-agent': 'JD4iPhone/167490 (iPhone; iOS 14.2; Scale/3.00)',
            'accept-language': 'zh-Hans-JP;q=1, en-JP;q=0.9, zh-Hant-TW;q=0.8, ja-JP;q=0.7, en-US;q=0.6',
            'content-type': 'application/x-www-form-urlencoded',
            'Cookie': cookie
        }
    }
    return new Promise( resolve => {
        $.post( config, async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ $.name } API请求失败，请检查网路重试` );
                    console.log( `${ JSON.stringify( err ) }` )
                } else {
                    data = JSON.parse( data );
                    $.isvToken = data[ 'tokenKey' ]
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}

//获取pin需要用到
function getToken2 () {
    let config = {
        url: 'https://api.m.jd.com/client.action?functionId=isvObfuscator&clientVersion=10.0.5&build=88679&client=android&d_brand=Xiaomi&d_model=RedmiK30&osVersion=11&screen=2175*1080&partner=xiaomi001&oaid=b30cf82cacfa8972&openudid=290955c2782e1c44&eid=eidAef5f8122a0sf2tNlFbi9TV+3rtJ+jl5UptrTZo/Aq5MKUEaXcdTZC6RfEBt5Jt3Gtml2hS+ZvrWoDvkVv4HybKpJJVMdRUkzX7rGPOis1TRFRUdU&sdkVersion=30&lang=zh_CN&uuid=290955c2782e1c44&aid=290955c2782e1c44&area=8_573_6627_52446&networkType=wifi&wifiBssid=e4e99f6369a1d19cdb3d775040f7c6b7&uts=0f31TVRjBSupVC5FrtaNQe8qCtXMmNz3X0Tor1OQBShGe0p03DpNlSh7sVXWosFqLgKcvrTyAGQsC4k2rpivPt24vfw7RDcJ%2Bq3QNqsc1fLN%2BbBSAd15tXqtvyyu59mM4D2XVs0G%2B9W3S%2Bx6SVLo%2FNZhgOK3V5MWrb1p2BEgr2j%2FU2oD%2FuCgRPaaNEZrjrZSzhrs7Z6c8zVDknwdid42mw%3D%3D&uemps=0-0&st=1624552541133&sign=f8d7cd590b7a7e5730b313798dc7d31e&sv=121',

        body: 'body=%7B%22id%22%3A%22%22%2C%22url%22%3A%22https%3A%2F%2Flzdz-isv.isvjcloud.com%22%7D&',
        headers: {
            'Host': 'api.m.jd.com',
            'accept': '*/*',
            'user-agent': 'JD4iPhone/167490 (iPhone; iOS 14.2; Scale/3.00)',
            'accept-language': 'zh-Hans-JP;q=1, en-JP;q=0.9, zh-Hant-TW;q=0.8, ja-JP;q=0.7, en-US;q=0.6',
            'content-type': 'application/x-www-form-urlencoded',
            'Cookie': cookie
        }
    }
    return new Promise( resolve => {
        $.post( config, async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ JSON.stringify( err ) }` )
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    data = JSON.parse( data );
                    $.token2 = data[ 'token' ]
                    //     console.log($.token2)
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}




//抄的书店的 不过不加好像也能进去
function getActCk () {
    return new Promise( resolve => {
        $.get( taskUrl( "/dingzhi/hisense/europeancup/activity/7431935", `activityId=${ $.actid }&shareUuid=${ $.shareuuid }&adsource=null&initHash=/home&shareuserid4minipg=8A%2BMf3SBYE8spQtvzQ2VLE7oeVP9kq2pYSH90mYt4m3fwcJlClpxrfmVYaGKuquQkdK3rLBQpEQH9V4tdrrh0w%3D%3D&shopid=undefined&lng=107.146945&lat=33.255267&sid=cad74d1c843bd47422ae20cadf6fe5aw&un_area=8_573_6627_52446` ), ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    if ( $.isNode() )
                        for ( let ck of resp[ 'headers' ][ 'set-cookie' ] ) {
                            cookie = `${ cookie }; ${ ck.split( ";" )[ 0 ] };`
                        }
                    else {
                        for ( let ck of resp[ 'headers' ][ 'Set-Cookie' ].split( ',' ) ) {
                            cookie = `${ cookie }; ${ ck.split( ";" )[ 0 ] };`
                        }
                    }
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}



//获取我的pin
function getMyPin () {
    let config = taskUrl( "/customer/getMyPing", `userId=1000324421&token=${ encodeURIComponent( $.token2 ) }&fromType=APP` )
    // console.log(config)
    return new Promise( resolve => {
        $.get( config, async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ JSON.stringify( err ) }` )
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    //       console.log(data)
                    data = JSON.parse( data );
                    if ( data.data && data.data.secretPin ) {
                        $.pin = data.data.secretPin
                        //    console.log($.pin)
                        cookie = `${ cookie } AUTH_C_USER=${ $.pin };`
                        $.nickname = data.data.nickname
                        console.log( `欢迎回来~  ${ $.nickname }` );
                    }
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}

function adlog () {
    let config = taskUrl( "/common/accessLogWithAD", `venderId=1000324421&code=99&pin=${ encodeURIComponent( $.pin ) }&activityId=901100032442101&pageUrl=https%3A%2F%2Flzdz-isv.isvjcloud.com%2Fdingzhi%2Fhisense%2Feuropeancup%2Factivity%2F4871674%3FactivityId%3D901100032442101%26shareUuid%3Db7f58330cb0844b485afacbdea3c7bca%26adsource%3Dnull%26initHash%3D%2Fhome%26shareuserid4minipg%3D8A%252BMf3SBYE8spQtvzQ2VLE7oeVP9kq2pYSH90mYt4m3fwcJlClpxrfmVYaGKuquQkdK3rLBQpEQH9V4tdrrh0w%253D%253D%26shopid%3Dundefined%26lng%3D107.146945%26lat%3D33.255267%26sid%3Dcad74d1c843bd47422ae20cadf6fe5aw%26un_area%3D27_2442_2444_31912%23%2Fhome&subType=app&adSource=null` )
    //   console.log(config)
    return new Promise( resolve => {
        $.post( config, async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ JSON.stringify( err ) }` )
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    //  data = JSON.parse(data);
                    if ( $.isNode() )
                        for ( let ck of resp[ 'headers' ][ 'set-cookie' ] ) {
                            cookie = `${ cookie }; ${ ck.split( ";" )[ 0 ] };`
                        }
                    else {
                        for ( let ck of resp[ 'headers' ][ 'Set-Cookie' ].split( ',' ) ) {
                            cookie = `${ cookie }; ${ ck.split( ";" )[ 0 ] };`
                        }
                    }
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}

// 获得用户信息  
function getUserInfo () {
    return new Promise( resolve => {
        let body = `pin=${ encodeURIComponent( $.pin ) }`
        $.post( taskPostUrl( '/wxActionCommon/getUserInfo', body ), async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    data = JSON.parse( data );

                    if ( data.data ) {
                        $.userId = data.data.id
                        $.pinImg = data.data.yunMidImageUrl
                        $.nick = data.data.nickname
                    }
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}

function getUid () {
    return new Promise( resolve => {
        let body = `activityId=${ $.actid }&pin=${ encodeURIComponent( $.pin ) }&pinImg=${ $.pinImg }&nick=${ encodeURIComponent( $.nick ) }&cjyxPin=&cjhyPin=&shareUuid=${ $.myid ? $.myid : $.shareuuid }`
        $.post( taskPostUrl( '/dingzhi/hisense/europeancup/activityContent', body ), async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    data = JSON.parse( data );
                    if ( data.data ) {
                        if ( $.index == 1 ) {
                            $.myid = data.data.uid
                            console.log( `账号1欧洲杯助力码为 ${ $.myid }` )
                        }
                        $.actid = data.data.activityId
                        /*      $.pinImg = data.data.yunMidImageUrl
                              $.nick = data.data.nickname
                              */
                    } else {
                        $.cando = false
                    }
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}

//获取任务列表
function getinfo () {
    let config = taskUrl( "/dingzhi/hisense/europeancup/myInfo", `activityId=${ $.actid }&pin=${ encodeURIComponent( $.pin ) }&pinImg=${ $.pinImg }&nick=${ $.nick }&cjyxPin=&cjhyPin=&shareUuid=${ $.shareuuid }` )
    return new Promise( resolve => {
        $.get( config, async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ JSON.stringify( err ) }` )
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    data = JSON.parse( data );

                    if ( data.result ) {
                        $.taskList = data.data.task.filter( x => ( x.maxNeed == 1 && x.curNum == 0 ) || ( x.taskid == "scansku" && x.curNum != x.maxNeed ) || ( x.taskid == "scanactive" && x.curNum != x.maxNeed ) )
                        data = data.data
                        //        console.log(data.data)
                        $.cow = `当前 足球币：${ data.coin }  签到天数：${ data.signDay }`
                        console.log( $.cow )
                        //      $.drawchance = $.draw.totalNum - $.draw.useNum
                    } else {
                        $.cando = false
                        //     console.log(data)
                        console.log( data.errorMessage )
                    }
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )

}


// 获取浏览商品
function getproduct () {
    return new Promise( resolve => {
        let body = `type=4&activityId=${ $.actid }&pin=${ encodeURIComponent( $.pin ) }&actorUuid=${ $.uuid }&userUuid=${ $.uuid }`
        $.post( taskUrl( '/dingzhi/hisense/europeancup/getproduct', body ), async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    data = JSON.parse( data );
                    // console.log(data)
                    if ( data.data && data.data[ 0 ] ) {
                        $.plist = data.data

                    }
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}

// 获取浏览商品
function writePersonInfo ( vid ) {
    return new Promise( resolve => {
        let body = `jdActivityId=1404370&pin=${ encodeURIComponent( $.pin ) }&actionType=5&venderId=${ vid }&activityId=${ $.actid }`

        $.post( taskUrl( '/interaction/write/writePersonInfo', body ), async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    //    console.log("浏览："+$.vid)
                    console.log( data )
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}

//兑换商品
function exchange ( id ) {
    return new Promise( resolve => {
        let body = `activityId=901100032442101&pin=${ encodeURIComponent( $.pin ) }&id=${ id }`
        $.post( taskUrl( '/dingzhi/hisense/europeancup/exchange', body ), async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    data = JSON.parse( data );
                    //   console.log()
                    if ( data.result && data.data.result ) {
                        console.log( `兑换 ${ data.data.data.rewardName }成功` )
                        $.exchange += `兑换 ${ data.data.data.rewardName }成功`
                    } else {
                        console.log( JSON.stringify( data.data ) )
                    }
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )
}

function dotask ( taskId, params ) {
    let config = taskUrl( "/dingzhi/hisense/europeancup/doTask", `taskId=${ taskId }&${ params ? ( "param=" + params + "&" ) : "" }activityId=${ $.actid }&pin=${ encodeURIComponent( $.pin ) }&actorUuid=${ $.uuid }&userUuid=${ $.shareuuid }` )
    //     console.log(config)
    return new Promise( resolve => {
        $.get( config, async ( err, resp, data ) => {
            try {
                if ( err ) {
                    console.log( `${ JSON.stringify( err ) }` )
                    console.log( `${ $.name } API请求失败，请检查网路重试` )
                } else {
                    data = JSON.parse( data );
                    if ( data.result ) {
                        if ( data.data.food ) {
                            console.log( "操作成功,获得足球币： " + data.data.coin )
                        }
                    } else {
                        console.log( data.errorMessage )
                    }
                }
            } catch ( e ) {
                $.logErr( e, resp )
            } finally {
                resolve( data );
            }
        } )
    } )

}








function taskUrl ( url, body ) {
    const time = Date.now();
    //  console.log(cookie)
    return {
        url: `https://lzdz-isv.isvjcloud.com${ url }?${ body }`,
        headers: {
            'Host': 'lzdz-isv.isvjcloud.com',
            'Accept': 'application/json',
            //     'X-Requested-With': 'XMLHttpRequest',
            'Referer': `https://lzdz-isv.isvjcloud.com/dingzhi/hisense/europeancup/activity/7431935?activityId=901100032442101&shareUuid=b7f58330cb0844b485afacbdea3c7bca&adsource=null&initHash=/home&shareuserid4minipg=8A%2BMf3SBYE8spQtvzQ2VLE7oeVP9kq2pYSH90mYt4m3fwcJlClpxrfmVYaGKuquQkdK3rLBQpEQH9V4tdrrh0w%3D%3D&shopid=undefined&lng=107.146945&lat=33.255267&sid=cad74d1c843bd47422ae20cadf6fe5aw&un_area=8_573_6627_52446`,
            'user-agent': 'jdapp;android;10.0.4;11;2393039353533623-7383235613364343;network/wifi;model/Redmi K30;addressid/138549750;aid/290955c2782e1c44;oaid/b30cf82cacfa8972;osVer/30;appBuild/88641;partner/xiaomi001;eufv/1;jdSupportDarkMode/0;Mozilla/5.0 (Linux; Android 11; Redmi K30 Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045537 Mobile Safari/537.36',
            'content-type': 'application/x-www-form-urlencoded',
            'Cookie': `${ cookie } IsvToken=${ $.IsvToken };AUTH_C_USER=${ $.pin }`,
        }
    }
}

function taskPostUrl ( url, body ) {
    return {
        url: `https://lzdz-isv.isvjcloud.com${ url }`,
        body: body,
        headers: {
            'Host': 'lzdz-isv.isvjcloud.com',
            'Accept': 'application/json',
            'X-Requested-With': 'XMLHttpRequest',
            'Referer': `https://lzdz-isv.isvjcloud.com/dingzhi/hisense/europeancup/activity/7431935?activityId=901100032442101&shareUuid=b7f58330cb0844b485afacbdea3c7bca&adsource=null&initHash=/home&shareuserid4minipg=8A%2BMf3SBYE8spQtvzQ2VLE7oeVP9kq2pYSH90mYt4m3fwcJlClpxrfmVYaGKuquQkdK3rLBQpEQH9V4tdrrh0w%3D%3D&shopid=undefined&lng=107.146945&lat=33.255267&sid=cad74d1c843bd47422ae20cadf6fe5aw&un_area=8_573_6627_52446`,
            'user-agent': 'jdapp;android;10.0.4;11;2393039353533623-7383235613364343;network/wifi;model/Redmi K30;addressid/138549750;aid/290955c2782e1c44;oaid/b30cf82cacfa8972;osVer/30;appBuild/88641;partner/xiaomi001;eufv/1;jdSupportDarkMode/0;Mozilla/5.0 (Linux; Android 11; Redmi K30 Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045537 Mobile Safari/537.36',
            'content-type': 'application/x-www-form-urlencoded',
            'Cookie': `${ cookie } IsvToken=${ $.IsvToken };`,
        }
    }
}
function jsonParse ( str ) {
    if ( typeof str == "string" ) {
        try {
            return JSON.parse( str );
        } catch ( e ) {
            console.log( e );
            $.msg( $.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie' )
            return [];
        }
    }
}
// prettier-ignore
function Env ( t, e ) { "undefined" != typeof process && JSON.stringify( process.env ).indexOf( "GITHUB" ) > -1 && process.exit( 0 ); class s { constructor( t ) { this.env = t } send ( t, e = "GET" ) { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && ( s = this.post ), new Promise( ( e, i ) => { s.call( this, t, ( t, s, r ) => { t ? i( t ) : e( s ) } ) } ) } get ( t ) { return this.send.call( this.env, t ) } post ( t ) { return this.send.call( this.env, t, "POST" ) } } return new class { constructor( t, e ) { this.name = t, this.http = new s( this ), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = ( new Date ).getTime(), Object.assign( this, e ), this.log( "", `🔔${ this.name }, 开始!` ) } isNode () { return "undefined" != typeof module && !!module.exports } isQuanX () { return "undefined" != typeof $task } isSurge () { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon () { return "undefined" != typeof $loon } toObj ( t, e = null ) { try { return JSON.parse( t ) } catch { return e } } toStr ( t, e = null ) { try { return JSON.stringify( t ) } catch { return e } } getjson ( t, e ) { let s = e; const i = this.getdata( t ); if ( i ) try { s = JSON.parse( this.getdata( t ) ) } catch { } return s } setjson ( t, e ) { try { return this.setdata( JSON.stringify( t ), e ) } catch { return !1 } } getScript ( t ) { return new Promise( e => { this.get( { url: t }, ( t, s, i ) => e( i ) ) } ) } runScript ( t, e ) { return new Promise( s => { let i = this.getdata( "@chavy_boxjs_userCfgs.httpapi" ); i = i ? i.replace( /\n/g, "" ).trim() : i; let r = this.getdata( "@chavy_boxjs_userCfgs.httpapi_timeout" ); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [ o, h ] = i.split( "@" ), n = { url: `http://${ h }/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post( n, ( t, e, i ) => s( i ) ) } ).catch( t => this.logErr( t ) ) } loaddata () { if ( !this.isNode() ) return {}; { this.fs = this.fs ? this.fs : require( "fs" ), this.path = this.path ? this.path : require( "path" ); const t = this.path.resolve( this.dataFile ), e = this.path.resolve( process.cwd(), this.dataFile ), s = this.fs.existsSync( t ), i = !s && this.fs.existsSync( e ); if ( !s && !i ) return {}; { const i = s ? t : e; try { return JSON.parse( this.fs.readFileSync( i ) ) } catch ( t ) { return {} } } } } writedata () { if ( this.isNode() ) { this.fs = this.fs ? this.fs : require( "fs" ), this.path = this.path ? this.path : require( "path" ); const t = this.path.resolve( this.dataFile ), e = this.path.resolve( process.cwd(), this.dataFile ), s = this.fs.existsSync( t ), i = !s && this.fs.existsSync( e ), r = JSON.stringify( this.data ); s ? this.fs.writeFileSync( t, r ) : i ? this.fs.writeFileSync( e, r ) : this.fs.writeFileSync( t, r ) } } lodash_get ( t, e, s ) { const i = e.replace( /\[(\d+)\]/g, ".$1" ).split( "." ); let r = t; for ( const t of i ) if ( r = Object( r )[ t ], void 0 === r ) return s; return r } lodash_set ( t, e, s ) { return Object( t ) !== t ? t : ( Array.isArray( e ) || ( e = e.toString().match( /[^.[\]]+/g ) || [] ), e.slice( 0, -1 ).reduce( ( t, s, i ) => Object( t[ s ] ) === t[ s ] ? t[ s ] : t[ s ] = Math.abs( e[ i + 1 ] ) >> 0 == +e[ i + 1 ] ? [] : {}, t )[ e[ e.length - 1 ] ] = s, t ) } getdata ( t ) { let e = this.getval( t ); if ( /^@/.test( t ) ) { const [ , s, i ] = /^@(.*?)\.(.*?)$/.exec( t ), r = s ? this.getval( s ) : ""; if ( r ) try { const t = JSON.parse( r ); e = t ? this.lodash_get( t, i, "" ) : e } catch ( t ) { e = "" } } return e } setdata ( t, e ) { let s = !1; if ( /^@/.test( e ) ) { const [ , i, r ] = /^@(.*?)\.(.*?)$/.exec( e ), o = this.getval( i ), h = i ? "null" === o ? null : o || "{}" : "{}"; try { const e = JSON.parse( h ); this.lodash_set( e, r, t ), s = this.setval( JSON.stringify( e ), i ) } catch ( e ) { const o = {}; this.lodash_set( o, r, t ), s = this.setval( JSON.stringify( o ), i ) } } else s = this.setval( t, e ); return s } getval ( t ) { return this.isSurge() || this.isLoon() ? $persistentStore.read( t ) : this.isQuanX() ? $prefs.valueForKey( t ) : this.isNode() ? ( this.data = this.loaddata(), this.data[ t ] ) : this.data && this.data[ t ] || null } setval ( t, e ) { return this.isSurge() || this.isLoon() ? $persistentStore.write( t, e ) : this.isQuanX() ? $prefs.setValueForKey( t, e ) : this.isNode() ? ( this.data = this.loaddata(), this.data[ e ] = t, this.writedata(), !0 ) : this.data && this.data[ e ] || null } initGotEnv ( t ) { this.got = this.got ? this.got : require( "got" ), this.cktough = this.cktough ? this.cktough : require( "tough-cookie" ), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && ( t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && ( t.cookieJar = this.ckjar ) ) } get ( t, e = ( () => { } ) ) { t.headers && ( delete t.headers[ "Content-Type" ], delete t.headers[ "Content-Length" ] ), this.isSurge() || this.isLoon() ? ( this.isSurge() && this.isNeedRewrite && ( t.headers = t.headers || {}, Object.assign( t.headers, { "X-Surge-Skip-Scripting": !1 } ) ), $httpClient.get( t, ( t, s, i ) => { !t && s && ( s.body = i, s.statusCode = s.status ), e( t, s, i ) } ) ) : this.isQuanX() ? ( this.isNeedRewrite && ( t.opts = t.opts || {}, Object.assign( t.opts, { hints: !1 } ) ), $task.fetch( t ).then( t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e( null, { status: s, statusCode: i, headers: r, body: o }, o ) }, t => e( t ) ) ) : this.isNode() && ( this.initGotEnv( t ), this.got( t ).on( "redirect", ( t, e ) => { try { if ( t.headers[ "set-cookie" ] ) { const s = t.headers[ "set-cookie" ].map( this.cktough.Cookie.parse ).toString(); s && this.ckjar.setCookieSync( s, null ), e.cookieJar = this.ckjar } } catch ( t ) { this.logErr( t ) } } ).then( t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e( null, { status: s, statusCode: i, headers: r, body: o }, o ) }, t => { const { message: s, response: i } = t; e( s, i, i && i.body ) } ) ) } post ( t, e = ( () => { } ) ) { if ( t.body && t.headers && !t.headers[ "Content-Type" ] && ( t.headers[ "Content-Type" ] = "application/x-www-form-urlencoded" ), t.headers && delete t.headers[ "Content-Length" ], this.isSurge() || this.isLoon() ) this.isSurge() && this.isNeedRewrite && ( t.headers = t.headers || {}, Object.assign( t.headers, { "X-Surge-Skip-Scripting": !1 } ) ), $httpClient.post( t, ( t, s, i ) => { !t && s && ( s.body = i, s.statusCode = s.status ), e( t, s, i ) } ); else if ( this.isQuanX() ) t.method = "POST", this.isNeedRewrite && ( t.opts = t.opts || {}, Object.assign( t.opts, { hints: !1 } ) ), $task.fetch( t ).then( t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e( null, { status: s, statusCode: i, headers: r, body: o }, o ) }, t => e( t ) ); else if ( this.isNode() ) { this.initGotEnv( t ); const { url: s, ...i } = t; this.got.post( s, i ).then( t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e( null, { status: s, statusCode: i, headers: r, body: o }, o ) }, t => { const { message: s, response: i } = t; e( s, i, i && i.body ) } ) } } time ( t, e = null ) { const s = e ? new Date( e ) : new Date; let i = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor( ( s.getMonth() + 3 ) / 3 ), S: s.getMilliseconds() }; /(y+)/.test( t ) && ( t = t.replace( RegExp.$1, ( s.getFullYear() + "" ).substr( 4 - RegExp.$1.length ) ) ); for ( let e in i ) new RegExp( "(" + e + ")" ).test( t ) && ( t = t.replace( RegExp.$1, 1 == RegExp.$1.length ? i[ e ] : ( "00" + i[ e ] ).substr( ( "" + i[ e ] ).length ) ) ); return t } msg ( e = t, s = "", i = "", r ) { const o = t => { if ( !t ) return t; if ( "string" == typeof t ) return this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : this.isSurge() ? { url: t } : void 0; if ( "object" == typeof t ) { if ( this.isLoon() ) { let e = t.openUrl || t.url || t[ "open-url" ], s = t.mediaUrl || t[ "media-url" ]; return { openUrl: e, mediaUrl: s } } if ( this.isQuanX() ) { let e = t[ "open-url" ] || t.url || t.openUrl, s = t[ "media-url" ] || t.mediaUrl; return { "open-url": e, "media-url": s } } if ( this.isSurge() ) { let e = t.url || t.openUrl || t[ "open-url" ]; return { url: e } } } }; if ( this.isMute || ( this.isSurge() || this.isLoon() ? $notification.post( e, s, i, o( r ) ) : this.isQuanX() && $notify( e, s, i, o( r ) ) ), !this.isMuteLog ) { let t = [ "", "==============📣系统通知📣==============" ]; t.push( e ), s && t.push( s ), i && t.push( i ), console.log( t.join( "\n" ) ), this.logs = this.logs.concat( t ) } } log ( ...t ) { t.length > 0 && ( this.logs = [ ...this.logs, ...t ] ), console.log( t.join( this.logSeparator ) ) } logErr ( t, e ) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); s ? this.log( "", `❗️${ this.name }, 错误!`, t.stack ) : this.log( "", `❗️${ this.name }, 错误!`, t ) } wait ( t ) { return new Promise( e => setTimeout( e, t ) ) } done ( t = {} ) { const e = ( new Date ).getTime(), s = ( e - this.startTime ) / 1e3; this.log( "", `🔔${ this.name }, 结束! 🕛 ${ s } 秒` ), this.log(), ( this.isSurge() || this.isQuanX() || this.isLoon() ) && $done( t ) } }( t, e ) }

